#include <stdlib.h>
#include <stdio.h>
#include "bit_map.h"

#define uint8 unsigned char
#define OFFSET_CHAINE 68

/*
* Retourne la valeur de tout le bitmap correspondant (8 bits)
* Data : bitMap a lire 
* nom_fichier 
*/
uint8 valeur_BitMap(int data ,FILE* nom_fichier) {
    uint8 val;
    long cursor;
    cursor = ftell(nom_fichier);		// retient la position du fichier
    fseek(nom_fichier, ((data-1)/8), SEEK_SET);    // revient à la position de départ
    val = fgetc(nom_fichier);       // lit la valeur du bit_map
    fseek(nom_fichier, cursor, SEEK_SET);  // revient à la position de départ
    return val;
}

/*
* Retourne la valeur du bit du bitmap correspondant 
* Data : bitMap a lire 
* nom_fichier 
*/
int read_BitMap(int data ,FILE* nom_fichier) {
    uint8 bit = 8-(data & 7);
    return  (valeur_BitMap(data,nom_fichier) & (1<<bit)) >> bit;   
}


/*
* Met a 0  la valeur du bit du bitmap correspondant 
* Data : bitMap a lire 
* nom_fichier 
*/
void reset_BitMap(int data, FILE* nom_fichier) {
    long cursor;
    uint8 val, invBit, bit = 8-(((data-1) & 7)+1);
    cursor = ftell(nom_fichier);		// retient la position du fichier
    fseek(nom_fichier, ((data-1)/8), SEEK_SET);    // se place a l'octet correspondant
    val = valeur_BitMap(data,nom_fichier);
    invBit = ~(1<<bit);
    fputc(val & invBit,nom_fichier);
    fseek(nom_fichier, cursor, SEEK_SET);  // revient à la position de départ
}

